package com.poc.importacao.bacias;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.poc.importacao.baseabstract.AbstractManager;
import com.poc.importacao.baseabstract.BaciaManagerAbstract;
import com.poc.importacao.baseabstract.Setup;
import com.poc.log.Log;

public class BaciaContemRioManager extends BaciaManagerAbstract {

    @Override
    protected ResultSet getRelacionados(String codLugarBaciaPrincipal) throws SQLException {
	String query = String.format(Setup.SELECT_RIOS_RELACIONADOS_JOIN_LINHA, codLugarBaciaPrincipal, Setup.getCodigoTipoLugar(Setup.RIO));
	return AbstractManager.getDatabaseManager().execute(query);
    }

    protected ResultSet getRelacionadosMultiLinha(String codLugarBaciaPrincipal) throws SQLException {
	String query = String.format(Setup.SELECT_RIOS_RELACIONADOS_JOIN_MULTILINHA, codLugarBaciaPrincipal, Setup.getCodigoTipoLugar(Setup.RIO));
	return AbstractManager.getDatabaseManager().execute(query);
    }

    @Override
    public void createInserts(String fileName) throws SQLException, IOException {
	ResultSet codLugarBacias = this.getTodasBacias();
	ResultSet riosRelacionados = null;

	String codLugarBacia;

	Integer codigoTipoRelacionamento;

	Double count = 0.0;
	Log inserts = new Log(fileName);
	inserts.append(INSERT_CLAUSULA_BASE);

	while (codLugarBacias.next()) {
	    codLugarBacia = codLugarBacias.getString(1);

	    riosRelacionados = this.getRelacionados(codLugarBacia);
	    codigoTipoRelacionamento = Setup.getCodigoTipoRelacionamento(Setup.RIO, Setup.FAZ_PARTE, Setup.BACIA_HIDROGRAFICA);

	    while (riosRelacionados.next()) {
		inserts.append((String.format(Setup.INSERT_RELACIONAMENTO_PARAMS, riosRelacionados.getString(1), codLugarBacia,
			codigoTipoRelacionamento)));
	    }

	    riosRelacionados = this.getRelacionadosMultiLinha(codLugarBacia);
	    while (riosRelacionados.next()) {
		inserts.append((String.format(Setup.INSERT_RELACIONAMENTO_PARAMS, riosRelacionados.getString(1), codLugarBacia,
			codigoTipoRelacionamento)));
	    }

	    count++;
	}

	inserts.close();
	this.finalize();

    }

    /**
     * @param args
     * @throws IOException
     * @throws SQLException
     */
    public static void main(String[] args) throws SQLException, IOException {

	BaciaContemRioManager baciaContemRio = new BaciaContemRioManager();

	baciaContemRio.createInserts("bacia_rio_inserts.sql");

    }

}
